const { request } = require('../../utils/request');
const { showToast } = require('../../utils/util');
const app = getApp();

Page({
  data: {
    addressList: [],
    loading: true,
    fromCart: false // 是否从购物车页面跳转来
  },

  onLoad(options) {
    // 检查是否从购物车页面跳转而来
    if (options.from === 'cart') {
      this.setData({ fromCart: true });
    }
    
    // 设置导航栏标题
    wx.setNavigationBarTitle({
      title: '收货地址管理'
    });
  },

  onShow() {
    this.fetchAddressList();
  },

  // 获取地址列表
  fetchAddressList() {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.navigateTo({ url: '/pages/my/index' });
      return;
    }

    this.setData({ loading: true });
    request({
      url: '/addresses',
      method: 'GET'
    }).then(res => {
      if (res.code === 200) {
        // 获取地址列表，确保默认地址排在前面
        let addressList = res.data || [];
        
        // 虽然后端会排序，但为了保险起见，前端也进行排序
        addressList.sort((a, b) => {
          // 优先根据默认地址排序（is_default为1的排前面）
          if (a.is_default !== b.is_default) {
            return b.is_default - a.is_default;
          }
          // 如果默认状态相同，则按创建时间降序排列（新创建的排前面）
          return new Date(b.create_time) - new Date(a.create_time);
        });
        
        this.setData({
          addressList: addressList,
          loading: false
        });
        
        // 如果从购物车页面跳转来，且有默认地址，直接选中默认地址
        if (this.data.fromCart && addressList.length > 0 && addressList[0].is_default === 1) {
          wx.setStorageSync('selected_address', addressList[0]);
        }
      } else {
        this.setData({ loading: false });
        showToast(res.message || '获取地址列表失败');
      }
    }).catch(err => {
      console.error('获取地址列表失败:', err);
      this.setData({ loading: false });
      showToast('网络错误，请稍后重试');
    });
  },

  // 新增地址
  goToAddAddress() {
    wx.navigateTo({
      url: '/pages/address/edit'
    });
  },

  // 编辑地址
  editAddress(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/address/edit?id=${id}`
    });
  },

  // 删除地址
  deleteAddress(e) {
    const id = e.currentTarget.dataset.id;
    const index = e.currentTarget.dataset.index;
    
    wx.showModal({
      title: '提示',
      content: '确定要删除这个地址吗？',
      success: (res) => {
        if (res.confirm) {
          this.doDeleteAddress(id, index);
        }
      }
    });
  },

  // 执行删除地址请求
  doDeleteAddress(id, index) {
    wx.showLoading({ title: '删除中...' });
    request({
      url: `/addresses/${id}`,
      method: 'DELETE',
      loading: false
    }).then(res => {
      wx.hideLoading();
      if (res.code === 200) {
        // 更新本地列表
        let newList = [...this.data.addressList];
        newList.splice(index, 1);
        this.setData({ addressList: newList });
        
        // 如果删除的是默认地址，也要清除本地缓存
        const cachedAddress = wx.getStorageSync('selected_address');
        if (cachedAddress && cachedAddress.id == id) {
          wx.removeStorageSync('selected_address');
        }
        
        showToast('删除成功');
      } else {
        showToast(res.message || '删除失败');
      }
    }).catch(err => {
      console.error('删除地址失败:', err);
      wx.hideLoading();
      showToast('网络错误，请稍后重试');
    });
  },

  // 设置默认地址
  setDefaultAddress(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.showLoading({ title: '设置中...' });
    request({
      url: `/addresses/${id}/default`,
      method: 'POST',
      loading: false
    }).then(res => {
      wx.hideLoading();
      if (res.code === 200) {
        // 更新本地缓存
        wx.setStorageSync('selected_address', res.data);
        this.fetchAddressList(); // 重新获取列表
        showToast('设置成功');
      } else {
        showToast(res.message || '设置失败');
      }
    }).catch(err => {
      console.error('设置默认地址失败:', err);
      wx.hideLoading();
      showToast('网络错误，请稍后重试');
    });
  },

  // 选择地址并返回
  selectAddress(e) {
    if (!this.data.fromCart) return;
    
    const address = e.currentTarget.dataset.address;
    // 将地址信息存储到缓存
    wx.setStorageSync('selected_address', address);
    wx.navigateBack();
  }
}); 